package com.example.myapplication.kotlin

class bicycle {
    fun run() {
        println("可以跑")
    }

    fun boom() {
        println("炸了")
    }

    fun fix() {
        println("修好了")
    }

    fun stop() {
        println("可以停")
    }
}

class EBicycle {
    var name: String = ""
    var runTime: Int = 0
    var speed: String = "25km"
    var price: Int = 0
}

fun main() {
    //apply
//    val eBicycle = EBicycle().apply {
//        name = "小牛电动车"
//        runTime = 100
//        speed = "25km"
//        price = 3999
//    }
//    println(eBicycle.name)


    //run作用域  run里面的变量只会在范围里面改变，不会改变外部变量
//    var num = 998;
//    val result = run {
//        var num = 10
//        num++;
//        num--;
//        println(num) // ?10
//        num // 返回值 可以省略return不写
//    }
//    println(result)// ? 10
//    println(num) // ? 998


    // ----------------with 对象上下文----------------
//    val bicycle = bicycle()
//    // 通过with，可以简化对象的调用，不用写一堆 对象.
//    with(bicycle) {
//        run()
//        boom()
//        fix()
//        boom()
//    }
//    // 等同于
//    bicycle.run()
//    bicycle.boom()
//    bicycle.fix()
//    bicycle.boom()


    // ----------------let 一般结合? 进行空安全限制，等同于 if的非空判断----------------
//    val money: Int? = null
    val money: Int? = 100

    money?.let {
        println("花钱~~~")
        println(it)
    }
    if (money != null) {
        println("消费~")
    }
}